package com.kaifamiao.demo.d0822;

import com.sun.source.util.Plugin;

import java.util.*;

public class Demo03 {


    public static void main(String[] args) {
        Player player = new Player("头号玩家");
        Player player1 = new Player("1号玩家");

        List<Player> list = new ArrayList<>();

        list.add(player);
        list.add(player1);

        System.out.println(list);

        // 匿名类的实质， 创建了一个类继承或者实现了抽象类/接口
        Comparator<Player> comparator = new Comparator<Player>() {
            @Override
            public int compare(Player o1, Player o2) {
                return o1.getName().compareTo(o2.getName());
            }
        };

        Comparator<Player> comparator1 = (o1, o2) -> o1.getName().compareTo(o2.getName());



//        list.sort(comparator);

        /// Lamada 表达式关注的是 拿什么 做 什么
        list.sort( (Player o1, Player o2) -> {
            return o1.getName().compareTo(o2.getName());
        });

        // 参数类型是固定或者说可以推断出来的, 省略参数类型
        list.sort( (o1, o2) -> {
            return o1.getName().compareTo(o2.getName());
        });

        // 如果做什么（代码片段中） 只有一句代码 可以省略 `{}` 以及 `return` 关键字
        list.sort( (o1, o2) -> o1.getName().compareTo(o2.getName()) );

//        list.sort(new A());





        System.out.println(list);

        FunctionInterface functionInterface = new FunctionInterface() {
            @Override
            public void test(int num) {
                System.out.println("functionInterface");
            }
        };

        FunctionInterface functionInterface1 = (num) -> System.out.println("functionInterface1");

    }
}

class A implements Comparator<Player> {

    @Override
    public int compare(Player o1, Player o2) {
        return o1.getName().compareTo(o2.getName());
    }

}

// 接口是一种约定， 约定了类应该是什么样的
@FunctionalInterface
interface FunctionInterface {

    public void test(int num);

    // 默认方法
    default void a(){}

    // static 方法
    static void b(){}

    // private
    private void c(){}
}

abstract class ABS{
    abstract void test();
}

class AAA extends ABS {

    @Override
    void test() {

    }
}